package scooper.cn.sc_base;

import android.app.Activity;
import android.content.*;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import android.widget.Toast;

import java.io.File;

/**
 * 手机相关功能调用
 * Created by jiangwj on 2014/9/17.
 */
public final class PhoneUtils {

    /**
     * 获取屏幕大小
     * @param context
     * @return
     */
    public static int getScreenWidth(Context context) {
        DisplayMetrics dm = new DisplayMetrics();
        WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        manager.getDefaultDisplay().getMetrics(dm);
        return dm.widthPixels;
    }

    /**
     * 获取屏幕高度
     * @param context
     * @return
     */
    public static int getScreenHeight(Context context) {
        DisplayMetrics dm = new DisplayMetrics();
        WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        manager.getDefaultDisplay().getMetrics(dm);
        return dm.heightPixels;
    }

    /**
     * 使用手机拨打电话
     * @param tel
     */
    public static void makeCall(Context context, String tel) {
        Intent intent = new Intent();
        intent.setAction("android.intent.action.CALL");
        intent.setData(Uri.parse("tel:" + tel));
        context.startActivity(intent);
    }

    /**
     * 使用相机拍照
     * （完成后，通过 onActivityResult 接收）
     * @param storeUri 拍摄图片时保存的文件路径
     */
    public static void takePhoto(Activity activity, Uri storeUri, int requestCode) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (storeUri != null) {
            intent.putExtra(MediaStore.EXTRA_OUTPUT, storeUri);
        }
        activity.startActivityForResult(intent, requestCode);
    }

    /**
     * 打开相册以供选择
     */
    public static void pickPhoto(Activity activity, int requestCode) {
        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        intent.setType("image/*");
        activity.startActivityForResult(intent, requestCode);
    }

//    /**
//     * 选择手机中的照片，或拍摄照片
//     * （选择后，通过 onActivityResult 接收）
//     * @param storeUri 拍摄图片时保存的文件路径
//     * @deprecated 在某些手机上无效，现在换用 takePhoto(), pickPhoto()
//     */
//    @Deprecated
//    public static void selectPhoto(Activity activity, Uri storeUri, int requestCode) {
//        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
//        intent.setType("image/*");
//        intent.putExtra(MediaStore.EXTRA_OUTPUT, storeUri);
//        activity.startActivityForResult(intent, requestCode);
//    }

    /**
     * 调用系统自带录像功能
     * （完成后，通过 onActivityResult 接收）
     * @param storeUri 录像文件保存的文件路径
     */
    public static void takeVideo(Activity activity, Uri storeUri, int requestCode) {
        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        if (storeUri != null) {
            intent.putExtra(MediaStore.EXTRA_OUTPUT, storeUri);
        }
        activity.startActivityForResult(intent, requestCode);
    }

    /**
     * 调用系统自带的录像功能
     * 特别说明：对于限制质量等不同手机会有不同的表现，不一定有效，而且即使有效也有不同的表现。
     * 最好的方式还是自己实现视频录制功能，这样对视频的质量能够统一控制。
     * （完成后，通过 onActivityResult 接收）
     * @param storeUri       录像文件保存的文件路径
     * @param requestCode    返回代码
     * @param quality        0 差(176x144)，1 高(1920x1080)
     * @param duration       录制时长(s)
     * @param size           视频大小(bytes)
     */
    public static void takeVideo(Activity activity, Uri storeUri, int requestCode, int quality, int duration, int size) {
        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        if (storeUri != null) {
            intent.putExtra(MediaStore.EXTRA_OUTPUT, storeUri);
        }
        //
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, quality);
        intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, duration);
        intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, size);
        //
        activity.startActivityForResult(intent, requestCode);
    }

//    public static void takeVideo(Activity activity, String storeUri, int requestCode, int duration, int size, int w, int h, boolean isMicInUse) {
//        Intent intent = new Intent(activity, RecorderActivity.class);
//        //设置参数 时长前后摄像头等
//        intent.putExtra(CameraRecoderUtils.CAMERA_TYPE, CameraRecoderUtils.BACK_CAMERA);
//        intent.putExtra(CameraRecoderUtils.RESOLUTION_W, w);
//        intent.putExtra(CameraRecoderUtils.RESOLUTION_H, h);
//        intent.putExtra(CameraRecoderUtils.PATH_DIR, storeUri.toString());
//        intent.putExtra(CameraRecoderUtils.MAX_DURATION, duration);
//        intent.putExtra(CameraRecoderUtils.ENCODING_BITRATE,size);
//        intent.putExtra(CameraRecoderUtils.MIC_INUSE,isMicInUse);
//        activity.startActivityForResult(intent, requestCode);
//    }
    /**
     * 打开相册以选择录像文件
     */
    public static void pickVideo(Activity activity, int requestCode) {
        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
//        Intent intent = new Intent();
        intent.setType("video/*");

//        intent.setAction(Intent.ACTION_GET_CONTENT);
        try {
            activity.startActivityForResult(intent, requestCode);
        } catch (Exception e){
            Toast.makeText(activity,"无法打开摄像文件", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 7.0该方法失效需要找到新方法
     * 获取存储的媒体文件
     * @param context       activity
     * @param data          onActivityResult 参数中的
     * @return 媒体文件存储文件
     */
    public static File getActivyResultMediaFile(Context context, File storageFile, Intent data) {
        if (data == null) {
            return storageFile == null ? null : storageFile;
        }
        Uri uri = data.getData();
        File file = null;
        if (uri != null) {
            if ("file".equals(uri.getScheme())) {
                file = new File(uri.getPath());
            } else {
                String[] proj = { MediaStore.Images.Media.DATA };
                CursorLoader loader = new CursorLoader(context, uri, proj, null, null, null);
                Cursor cursor = null;
                try {
                    cursor = loader.loadInBackground();
                    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    cursor.moveToFirst();
                    file = new File(cursor.getString(column_index));
                } finally {
                    if (cursor != null) {
                        try {
                            cursor.close();
                        } catch (Exception e) {}
                    }
                }
            }
        }
        return file;
    }

    /**
     * 复制文本到剪切板
     * @param context
     * @param text 需要复制的文本
     */
    public static void copyText(Context context, String text) {
        ClipboardManager clipManager = (ClipboardManager) context
                .getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData cd = ClipData.newPlainText(null, text);
        clipManager.setPrimaryClip(cd);
        Toast.makeText(context, "已复制到剪切板", Toast.LENGTH_SHORT).show();
    }
}
